#include <bibliotecas.h>
#include <imprimir.h>

using namespace std;
using namespace Gtk::Menu_Helpers;

#ifndef __PRINCIPAL_H__
#define __PRINCIPAL_H__ 1

typedef struct reg_aux
	{
	int tipo;
	string dado;
	} REG_AUX;

typedef struct estado_aux
	{
	string dado;
	string codigo;
	} EST_CIV;

/** Classe Template COLUNAS 
 ela reimplementa a classe Gtk::TreeModel::ColumnRecord e é utilizada para 
 TreeView e EntryCompletion.
 */
class COLUNAS : public Gtk::TreeModel::ColumnRecord
	{
	public : 
		/** Construtor da Classe COLUNAS */
		COLUNAS ();
		/** Destrutor da Classe COLUNAS */
		~COLUNAS ();
		Gtk::TreeModelColumn<Glib::ustring> campo[7];/**<Campos para TreeView */	
		
	private:
		int n_campos;/**<Quantidade de Campos. */
					
	};

class PRINCIPAL: public BANCOSL
	{
	public:
		PRINCIPAL();
		~PRINCIPAL();
		Gtk::Window *Tela, *Configurar, *Analisar;

	protected:
		
		Gtk::Statusbar BarraStatus;/**<Gtk::Statusbar barra de status do sistema.*/
		guint statusbar;/**<Atributo controlador da PRINCIPAL::BarraStatus.*/
		
		Gtk::MenuBar *menu_barra;/**<Gtk::MenuBar menu principal.*/
		Gtk::Menu MenuArquivo;/**<Gtk::Menu responsável pelo submenu Arquivos.*/
		Gtk::Menu MenuRelatorio;/**<Gtk::Menu responsável pelo submenu Relatórios.*/

		Gtk::Entry *E_Alias_Clarion, *E_User_Clarion, *E_Senha_Clarion;
		Gtk::Entry *E_Alias_Firebird, *E_User_Firebird, *E_Senha_Firebird;
		Gtk::Entry *E_Paginacao;

		Gtk::Button *B_SQL[8], *B_Aplicar, *B_Sync[8], *Navegar[4], *B_Analise[8];
		Gtk::Label *Texto_Nav;

		Gtk::TextView *TV_Result, *TV_Log;
		Glib::RefPtr<Gtk::TextBuffer> BF_Result, BF_Log;
		Gtk::TextIter iter, inicio, final;
		Gtk::TextIter l_iter, l_inicio, l_final;

		Glib::RefPtr<Gtk::ListStore> arvore_ref;/**<Ponteiro de referência para PRINCIPAL::arvore_reg*/
		Gtk::TreeModel::Row celula;/**<Atributo do tipo Gtk::TreeModel::Row. */
		Gtk::TreeView *TrVAnalise;/**<Gtk::TreeView da tela PRINCIPAL::Contas.*/

	private:
		COLUNAS arvore_reg;
		
		Glib::RefPtr<Gdk::Pixbuf> ponteiro_icon;/**<Ponteiro que guarda o ícone do sistema.*/

		string codigo_conf;
		string alias_clarion, user_clarion, senha_clarion;
		string alias_firebird, user_firebird, senha_firebird;
		BANCOODBC *Clarion, *Firebird;
		int paginacao, total, pagina, paginas, r_inicio, opc_sql;

		bool carregar_log;

		string arq_log, arq_sql;
		ofstream log, log1;

		REG_AUX *regimes;
		int total_regimes;
		string get_regimes(string);

		void configurar(Gtk::Window *);
		bool relogio();
		void dados_base();
		void dados_conf(int);
		void testar_conecao(int, Gtk::Window *);
		void salvar(int, Gtk::Window *);
		void gerar_sql (int);
		string org_exp(BANCOODBC *, string);
		string profissao(BANCOODBC *, string);
		string cod_cidade;
		string bairro(BANCOODBC *, string);
		string conjuge(BANCOODBC *, BANCOODBC *, string);
		string nacao(BANCOODBC *, BANCOODBC *, string);
		string cidade(BANCOODBC *, BANCOODBC *, string);
		bool cpf;
		string t_cpf_cnpj(string);
		ofstream arquivo;
		bool nome_sistema(BANCOODBC *,string);
		bool noivo_sistema(BANCOODBC *,string);
		string codnoiv;
		bool noiva_sistema(BANCOODBC *,string);
		void adiciona_sql(char *,string,string);
		string tratar_apostrofo(string);
		string loc_cas(BANCOODBC *, string);
		bool casou(BANCOODBC *, string, string);
		string local_nasc(BANCOODBC *, BANCOODBC *, string);
		bool nasceu(BANCOODBC *, string, string, string);
		string cod_nasc;
		bool escrever(int);
		void gravar_sql ();
		
		void sincronizar(int);
		
		void navegar(int);

		void analise(Gtk::Window *);

		void verificar(int);

		string atualizar_codigo(int, string, string);

		void relatorio(int);

		vector<EST_CIV> estado_civil;
		string qual_ec(string);

		string parentesco(BANCOODBC *, string);
		string medico(BANCOODBC *, string);
	};

#endif /*__PRINCIPAL_H__*/